# !/usr/bin python3
# encoding: utf-8 -*-
# @file     : redis_util.py
# @author   : 沙陌 Matongxue_2
# @Time     : 2023/12/23 15:25
# @Copyright: 北京码同学
import javaobj
import redis


class RedisUtil:

    def __init__(self,host,pwd=None,port=6379,decode_responses=False):
        self.pool = redis.ConnectionPool(
                    host=host,
                    password=pwd,
                    port=port,
                    decode_responses=decode_responses
                )
        self.r = redis.Redis(connection_pool=self.pool)
    # 提供统一的数据获取方法
    def get(self,key):
        # 判断目标数据的类型，来决定要使用哪个获取方法
        type = self.r.type(key)
        if type == b'string' or type =='string':
            return self.r.get(key)
        elif type == b'hash' or type == 'hash':
            return self.r.hgetall(key)
        elif type == b'list' or type == 'list':
            return self.r.lrange(key,0,-1)
        elif type == b'set' or type == 'set':
            return self.r.smembers(key)
        elif type == b'zset' or type == 'zset':
            return self.r.zrange(key,0,-1)
        else:
            raise BaseException(f'{key}得数据类型不支持')

if __name__ == '__main__':
    redis_util = RedisUtil(
        host='59.36.173.55',
        port=6379,
        pwd='mtx',
        decode_responses=False
    )
    # 立即购买业务的数据解析
    # res = redis_util.get('{BUY_NOW_ORIGIN_DATA_PREFIX}_59')
    # # res是开发把后台源码中的java对象做了序列化存储后的数据
    # # 我们要将他转成python中的对象，才好去操作
    # # 需要借助一个第三方库javaobj-py3
    # res_object = javaobj.loads(res)
    # print(res_object)
    # print(type(res_object))
    # buy_now_object = res_object[0]
    # # buy_now_object 这个对象到底都有哪些信息，需要问开发
    # # 使用dir函数来看buy_now_object对象都有哪些属性信息
    # print(dir(buy_now_object))
    # skuId=buy_now_object.skuId
    # num = buy_now_object.num
    # print(skuId)
    # print(num)

    # 订单各项参数的数据解析，收货地址、支付方式、送货等等
    res = redis_util.get('{CHECKOUT_PARAM_ID_PREFIX}_59')
    print(res)
    # 该数据是hash，对应的就是python里的字典
    # 所以我们要遍历，
    for key,value in res.items():

        key = javaobj.loads(key)
        if value==b'':
            value=''
        else:
            value  = javaobj.loads(value)
        if key == 'paymentType':
            print(dir(value))
            value = value.constant
        print(f'{key}:{value}')

